###fixture的执行顺序影响因素-scope

'''
影响因素有三：
scope，就是fixture函数的作用范围，比如scope='class'。
dependencies，可能会存在fixture请求了别的fixture，所以产生了依赖关系，也要考虑进去。
autouse，如果autouse=True，那么在作用范围内，这个fixture是最先调用的。

所以，像fixture函数或测试函数的名称、定义的位置、定义的顺序以及请求fixture的顺序，除了巧合之外，对执行顺序没有任何影响。
'''

import pytest

#scope执行顺序：["session", "package", "module", "class", "function"]。
@pytest.fixture(scope="session")
def order():
    return []


@pytest.fixture
def func(order):
    order.append("function")


@pytest.fixture(scope="class")
def cls(order):
    order.append("class")


@pytest.fixture(scope="module")
def mod(order):
    order.append("module")


@pytest.fixture(scope="package")
def pack(order):
    order.append("package")


@pytest.fixture(scope="session")
def sess(order):
    order.append("session")


class TestClass:
    def test_order(self, func, cls, mod, pack, sess, order):
        assert order == ["session", "package", "module", "class", "function"]